package main

//包的路径从GOPATH/src后面的路径开始写起，路径分隔符用/
//想被别的包调用的标识符都要首字母大写
//单行导入和多行导入
//导入包的时候，可以指定别名
//导入包不想使用包内部的标识符，需要使用匿名导入 _
/* 每个包导入的时候都会自动以执行一个名为init()的桉树，
他没有参数也没有返回值，也不能手动调用 */
/* 多个包中都定义了init()函数，则它们的执行顺序，
如引入关系为main-A-B-C-D
则执行init()函数顺序为   D-C-B-A-main */
import (
	"fmt"

	calc "code.oldboyedu.com/studygo/day05/10calc"
)

var x = 100

const pi = 3.14

func init() {
	fmt.Println("初始化开始，自动执行")
	fmt.Println(x, pi)
}

func main() {
	sum := calc.Add(10, 20)
	fmt.Println(sum)

	age := 20
	age = calc.Age(age)
	fmt.Println(age)
	age1 := 12
	calc.Age1(age1)
	fmt.Println(age1)

	age2 := 15
	calc.Age2(&age2)
	fmt.Println(age2)

	data := make([]int, 0, 20)

	fmt.Printf("%d---%d\n", len(data), cap(data))
	fmt.Println(data)

	fmt.Println(data[:cap(data)])
	fmt.Printf("data---%p \n", data)
	d := append(data[:cap(data)], 0)
	fmt.Printf("d---%p \n", d)
	fmt.Printf("%d---%d\n", len(d), cap(d))
	d = append(d, 'c')
	fmt.Printf("%d---%d\n", len(d), cap(d))

	fmt.Println(d)
	fmt.Printf("d---%p \n", d)
	fmt.Printf("data---%p \n", data)
	fmt.Printf("%d---%d\n", len(data), cap(data))
	data = d[:len(data)]
	fmt.Printf("data---%p \n", data)
	fmt.Printf("%d---%d\n", len(data), cap(data))
	fmt.Println(data)
	fmt.Println(data[len(data):cap(data)])

	data1 := make([]int, 0, 5)
	fmt.Printf("%d---%d---%v\n", len(data1), cap(data1), data1)
	data1 = append(data1[:cap(data1)], 1, 2, 3)
	fmt.Printf("%d---%d\n", len(data1), cap(data1))
	fmt.Printf("%d---%d---%v---%v\n", len(data1), cap(data1), data1, data1[0:cap(data1)])
	fmt.Println(data1)
	fmt.Println(data1[:])
	fmt.Println(data1[len(data1):cap(data1)])
	data2 := data1[1:3]
	fmt.Printf("%d---%d\n", len(data2), cap(data2))
	fmt.Println(data2)
	fmt.Println(data2[0:cap(data2)])
	fmt.Println(data2[len(data2):cap(data2)])

}
